"""@namespace 装饰器扩展

处理命名空间装饰器。
"""

from ..ir import IRContext, IRGroupNode
from ..extension_base import extension_processor


@extension_processor(
    "namespace",
    match_rule=[
        {"decorator": "namespace", "node_type": "function"},
        {"decorator": "namespace", "node_type": "class"},
    ],
)
def process_namespace(context: IRContext):
    """处理namespace装饰器"""

    node = context.node
    module = context.module

    # 获取装饰器参数中的命名空间名称
    decorator = context.get_decorator("namespace")
    assert decorator, "namespace 装饰器处理失败"

    # 替换成 C++ 命名空间格式
    namespace_name = ""
    if "args" in decorator and len(decorator["args"]) > 0:
        namespace_name = decorator["args"][0]
        if len(namespace_name) > 0:
            namespace_name = namespace_name.replace(".", "::")

    # 构建命名空间节点
    namespace_node = IRGroupNode(
        name=f"namespace_{node.name}",
        source_line=node.source_line,
        nodes=[node],
        tag="namespace",
        params={
            "namespace": namespace_name,
        },
    )
    module.replace_node(node, namespace_node)
